Make sure we only send one grab broken event
authorAlexander Larsson <alexl@redhat.com>
Thu, 27 Aug 2009 11:11:04 +0000 (13:11 +0200)
committerAlexander Larsson <alexl@redhat.com>
Thu, 27 Aug 2009 11:32:01 +0000 (13:32 +0200)
We were incorrectly sending grab broken events in two places which
could cause multiple events for a single grab broken.

gdk/gdkdisplay.c

index 10a0b90c323a0bbc2127eca092452d48b420475f..2d094886ea79e0c6c21119b6c5f098ec5082a544 100644 (file)
@@ -1037,11 +1037,6 @@ switch_to_pointer_grab (GdkDisplay *display,
          
          /* We're now ungrabbed, update the window_under_pointer */
          _gdk_display_set_window_under_pointer (display, pointer_window);
-
-         if (last_grab->implicit_ungrab)
-           generate_grab_broken_event (last_grab->window,
-                                       FALSE, TRUE,
-                                       NULL);
        }
     }
   
@@ -1089,13 +1084,12 @@ _gdk_display_pointer_grab_update (GdkDisplay *display,
            next_grab = NULL; /* Actually its not yet active */
        }
 
-      if (next_grab == NULL ||
-         current_grab->window != next_grab->window)
+      if ((next_grab == NULL && current_grab->implicit_ungrab) ||
+         (next_grab != NULL && current_grab->window != next_grab->window))
        generate_grab_broken_event (GDK_WINDOW (current_grab->window),
                                    FALSE, current_grab->implicit,
                                    next_grab? next_grab->window : NULL);
 
-
       /* Remove old grab */
       display->pointer_grabs =
        g_list_delete_link (display->pointer_grabs,